--- title: "L1-022 奇偶分家" created: 2025-11-28 tags: - 算法 --- # L1-022 奇偶分家 ## 题目 [L1-022 奇偶分家](https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=994805114445873152&page=0) ![[image-7e5fbe73.png]] ## 思路分析 #### 1、奇偶性判定 我们判断一个数是奇数还是偶数,往往是通过取模 %来判断的,如下: ```cpp #include int main() { if(5 % 2 == 1) { printf("5是奇数\n"); } if(6 % 2 == 0) { printf("6是偶数\n"); } return 0; } ``` 然而,我们也可以这么写: ```cpp #include int main() { if(5 & 1) { printf("5是奇数\n"); } if( (6 & 1) ==0 ) { printf("6是偶数\n"); } return 0; } ``` 这是利用了奇数和偶数分别的二进制数的特性,如下表所示: ![[2-Learning/02-算法/05-天梯赛/L1/assets/image-2c0792ab.png]] 所以,我们对任何一个数,通过将它和 0b1 进行位与,结果为零,则必然这个数的二进制末尾位为0,根据以上表就能得出它是偶数了;否则,就是奇数。 ## 代码实现 ```cpp #include using namespace std; #define endl '\n' int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int n;cin>>n; int cntj=0,cnto=0; while(n--){ int tmp;cin>>tmp; if(tmp&1) cntj++; else cnto++; } cout<